#ifndef _WX_QUANTIZE_H_
#define _WX_QUANTIZE_H_

#include "wx/object.h"

class wxImage;
class wxPalette;

#define wxQUANTIZE_INCLUDE_WINDOWS_COLOURS      0x01
#define wxQUANTIZE_RETURN_8BIT_DATA             0x02
#define wxQUANTIZE_FILL_DESTINATION_IMAGE       0x04

class wxQuantize: public wxObject {
  public:
    DECLARE_DYNAMIC_CLASS( wxQuantize )

    //// Constructor

    wxQuantize() {}
    virtual ~wxQuantize() {}

    static bool Quantize( const wxImage& src, wxImage& dest, wxPalette** pPalette, int desiredNoColours = 236,
                          unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS | wxQUANTIZE_FILL_DESTINATION_IMAGE | wxQUANTIZE_RETURN_8BIT_DATA );

    // This version sets a palette in the destination image so you don't
    // have to manage it yourself.

    static bool Quantize( const wxImage& src, wxImage& dest, int desiredNoColours = 236,
                          unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS | wxQUANTIZE_FILL_DESTINATION_IMAGE | wxQUANTIZE_RETURN_8BIT_DATA );

    //// Helpers

    // Converts input bitmap(s) into 8bit representation with custom palette

    // in_rows and out_rows are arrays [0..h-1] of pointer to rows
    // (in_rows contains w * 3 bytes per row, out_rows w bytes per row)
    // fills out_rows with indexes into palette (which is also stored into palette variable)
    static void DoQuantize( unsigned w, unsigned h, unsigned char **in_rows, unsigned char **out_rows, unsigned char *palette, int desiredNoColours );

};

#endif
// _WX_QUANTIZE_H_
